package net.dodoman.spider;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

/**
 * @author yanping
 * 
 */
public class ParserList extends Parser {
	private static final long serialVersionUID = -5513514660341272399L;

	// 根据多个Filter返回过滤结果
	public List getDocList(String url, String[] filters)
			throws ParserException, IOException, SQLException {
		String getText, title, link;
		List htmlDocList = new ArrayList();
		LinkTag tempLinkTag;
		ListNode tempNode;
		NodeList nodeList;
		NodeFilter firstFilter, tempFilter;
		HtmlDocument htmlDoc;
		Parser parser = new Parser(url);
		// TODO 编码格式要根据网站html编码进行编码
		parser.setEncoding(ParserUtil.GB2312_CHARSET);
		firstFilter = new TagNameFilter(filters[0]);// 按TagNameFilter获取Tag标签Html源码
		nodeList = parser.parse(firstFilter);
		if (filters.length > 1) {
			for (int j = 1; j < filters.length; j++) {
				tempFilter = new TagNameFilter(filters[j]);
				nodeList = nodeList.extractAllNodesThatMatch(tempFilter);
			}
		}
		for (int i = 0; i < nodeList.size(); i++) {
			getText = nodeList.elementAt(i).getText();
			tempNode = nodeList.elementAt(i);
			if (getText.indexOf(ParserUtil.SPECIAL_TEXT) > -1
					&& getText.indexOf(ParserUtil.SPECIAL_TEXT1) == -1) {
				tempLinkTag = (LinkTag) tempNode;
				title = StringUtils.replace(tempLinkTag.getLinkText(),
						"&nbsp;", "");
				title = ParserUtil.replaceInvalidText(title);
				// link = StringUtils.replace(tempLinkTag.getLink(), "&", "@");
				link = tempLinkTag.getLink();
			} else {
				nodeList.remove(i);
			}
		}
		return htmlDocList;
	}

	// 根据htmlDoc获取详细内容页面属性后返回htmlDoc
	private static String getDetailContent(HtmlDocument htmlDoc)
			throws ParserException, IOException {
		Parser parser = new Parser(htmlDoc.getLink());
		parser.setEncoding(ParserUtil.GB2312_CHARSET);
		NodeFilter tdFilter = new TagNameFilter(ParserUtil.TD_TAG_NAME);
		StringBuffer sb = new StringBuffer();
		NodeList nodeList = parser.parse(tdFilter);
		for (int i = 0; i < nodeList.size(); i++) {
			String getText = nodeList.elementAt(i).getText();
			if (getText.indexOf(ParserUtil.DETAIL_SPECIAL_TEXT) > -1) {
				sb.append(nodeList.elementAt(i).toHtml() + "\n");
			}
		}
		htmlDoc.setHtmlResource(sb.toString());
		return sb.toString();
	}
}
